package command_pattern.ex1;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 申书航
 * @version 1.0
 * 应用程序类，负责初始化编辑器、按钮和快捷键，并执行命令。
 */
@Data
public class Application {

    private Editor editor;

    private List<Button> buttons;

    private List<ShortCut> shortCuts;

    private String clipboard;

    /**
     * 构造函数，初始化按钮和快捷键列表，调用init方法进行设置。
     */
    public Application() {
        buttons = new ArrayList<Button>();
        shortCuts = new ArrayList<>();
        init();
    }

    /**
     * 初始化编辑器、按钮和快捷键。
     */
    public void init() {
        // 初始化编辑器
        editor = new Editor();
        editor.replaceText("初始文本");
        // 初始化按钮
        buttons.add(new Button(new CopyCommand(this, editor)));
        buttons.add(new Button(new PasteCommand(this, editor)));
        buttons.add(new Button(new CutCommand(this, editor)));
        // 初始化快捷键
        shortCuts.add(new ShortCut(new CopyCommand(this, editor)));
        shortCuts.add(new ShortCut(new PasteCommand(this, editor)));
        shortCuts.add(new ShortCut(new CutCommand(this, editor)));
    }

    /**
     * 执行命令，包括剪切、粘贴和复制。
     */
    public void doCommand() {
        // 按下复制按钮
        shortCuts.get(2).key();
        System.out.println("剪切板内容：" + clipboard);
        System.out.println("文本框内容：" + editor.getText());

        // 按下粘贴按钮
        buttons.get(1).click();
        System.out.println("文本框内容：" + editor.getText());

        // 按下剪切按钮
        editor.replaceText("修改内容");
        buttons.get(0).click();
        System.out.println("剪切板内容：" + clipboard);
        System.out.println("文本框内容：" + editor.getText());
    }

    /**
     * 程序入口，创建Application实例并执行命令。
     */
    public static void main(String[] args) {
        Application app = new Application();
        app.doCommand();
    }
}

